package com.example.rabc.service;

import com.example.rabc.entity.Permission;

import java.util.List;

/**
 * 权限组件接口 - 组合模式的核心组件
 * 定义权限节点的基本操作，统一处理单个权限和权限组合
 */
public interface PermissionComponent {
    
    /**
     * 获取权限ID
     * @return 权限ID
     */
    Long getId();
    
    /**
     * 获取权限代码
     * @return 权限代码
     */
    String getPermissionCode();
    
    /**
     * 获取权限名称
     * @return 权限名称
     */
    String getPermissionName();
    
    /**
     * 检查是否具有指定权限
     * @param permissionCode 权限代码
     * @return 是否具有权限
     */
    boolean hasPermission(String permissionCode);
    
    /**
     * 添加子权限节点
     * @param component 权限组件
     */
    void add(PermissionComponent component);
    
    /**
     * 移除子权限节点
     * @param component 权限组件
     */
    void remove(PermissionComponent component);
    
    /**
     * 获取子权限节点列表
     * @return 子权限节点列表
     */
    List<PermissionComponent> getChildren();
    
    /**
     * 获取父权限节点
     * @return 父权限节点
     */
    PermissionComponent getParent();
    
    /**
     * 设置父权限节点
     * @param parent 父权限节点
     */
    void setParent(PermissionComponent parent);
    
    /**
     * 获取原始权限实体
     * @return 权限实体
     */
    Permission getPermission();
}